{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%reload_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "\n",
    "from helper import linear_regression as lr\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X, y, Xval, yval, Xtest, ytest = lr.load_data()\n",
    "# insert the intercept data of every X\n",
    "X, Xval, Xtest = [np.insert(x.reshape(x.shape[0], 1), 0, np.ones(x.shape[0]), axis=1) for x in (X, Xval, Xtest)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# cost\n",
    "<img style=\"float: left;\" src=\"../img/linear_cost.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "303.95152555359761"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta = np.ones(X.shape[1])\n",
    "lr.cost(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# regularized cost\n",
    "<img style=\"float: left;\" src=\"../img/linear_reg_cost.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "303.99319222026429"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr.regularized_cost(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# gradient\n",
    "<img style=\"float: left;\" src=\"../img/linear_gradient.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -15.30301567,  598.16741084])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr.gradient(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# regularized gradient\n",
    "<img style=\"float: left;\" src=\"../img/linear_reg_gradient.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -15.30301567,  598.25074417])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr.regularized_gradient(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# fit the data\n",
    "> regularization term $\\lambda=0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "theta = np.ones(X.shape[0])\n",
    "\n",
    "final_theta = lr.linear_regression_np(X, y, l=0).get('x')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x11a196fd0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x117fbc9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "b = final_theta[0] # intercept\n",
    "m = final_theta[1] # slope\n",
    "\n",
    "plt.scatter(X[:,1], y, label=\"Training data\")\n",
    "plt.plot(X[:, 1], X[:, 1]*m + b, label=\"Prediction\")\n",
    "plt.legend(loc=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:tf]",
   "language": "python",
   "name": "conda-env-tf-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
